/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package consultorio;
import Conexion.*;
import com.toedter.calendar.JDateChooser;
import java.sql.*;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;

/**
 *
 * @author Consultorio "Tú te sanas"
 */
public class Pacientes {
    
    conexion con;
    
    public Pacientes()throws ExceptionInInitializerError {
        con = new conexion();
    }    
                                          /*METODO BUSCAR PACIENTE*/
        
    public Object [][] buscarPaciente()
    {       
        int nro = 0;
        try
        {
            PreparedStatement pre = con.getConexion().prepareStatement
        (
                "SELECT count(*) AS Nro FROM Consultas_Medicas where rut_paciente = '"+ ConsultaMedica.txtRut.getText() +"'"
        );
            ResultSet res = pre.executeQuery();
            res.next();
            nro = res.getInt("Nro");
            res.close();
        }
        catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
        /* [Nro] son la cantidad de datos que encontramos al hacer la consulta COUNT(*) & [6] son las 6 columnas que sacamos*/
        
        Object[][] datos = new String[nro][8];
        
        try{
            PreparedStatement pre;
            
            /* Un inner join para sacar datos de 3 tablas diferentes (Consultas_Medicas, Medicos & Pacientes) */
            
            pre = con.getConexion().prepareStatement
            (
                    " SELECT Codigo_Consulta,Pacientes.nombre_paciente + ' ' + Pacientes.apellido_paciente as Nombre_Paciente,"+
                    " Medicos.nombre_medico + ' ' + Medicos.apellido_medico as Nombre_Medico," +
                    " fecha_consulta, diagnostico, tratamiento, tipo_consulta, observaciones FROM Consultas_medicas" +
                    " inner join Medicos On Consultas_medicas.rut_medico = Medicos.rut_medico" +
                    " inner join Pacientes On Consultas_medicas.rut_paciente = Pacientes.rut_paciente" +
                    " WHERE Pacientes.rut_paciente = '"+ ConsultaMedica.txtRut.getText()+"'"
            );
            ResultSet res = pre.executeQuery();
        int i = 0;
        /* Obtenemos los resultados de la consulta hecha & las guardamos en un arreglo.*/
        while(res.next())
        {
            String codigoConsulta   =   res.getString("Codigo_Consulta");
            String fechaConsulta    =   res.getString("fecha_consulta");
            String diagnostico      =   res.getString("diagnostico");
            String tratamiento      =   res.getString("tratamiento");
            String rutPaciente      =   res.getString("Nombre_Paciente");
            String rutMedico        =   res.getString("Nombre_Medico");
            String tipoConsulta     =   res.getString("tipo_consulta");
            String observaciones    =   res.getString("observaciones");
            datos[i][0] = fechaConsulta;
            datos[i][1] = diagnostico;
            datos[i][2] = tratamiento;
            datos[i][3] = rutPaciente;
            datos[i][4] = rutMedico;
            datos[i][5] = tipoConsulta;
            datos[i][6] = codigoConsulta;
            datos[i][7] = observaciones;
            i++;
        }    
        }
        catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
        return datos;
    }
   
                  /*------------------- FIN METODO BUSCAR PACIENTE -------------------*/  
    
    
                                     /* METODO VALIDACIÓN DE DATOS */
    
    public void validacionDatos(){
        
        FichaPaciente f = new FichaPaciente();
        
        /*[1] Ya que queremos obtener solo 1 fila de datos, & [1] porque consultamos una sola columna ("Rut_Paciente"}*/
        
        Object[][] data = new String[1][1];
        
        try
        {
            PreparedStatement pre;
            pre = con.getConexion().prepareStatement
        (
                " SELECT distinct rut_paciente" +
                " FROM Consultas_medicas WHERE rut_paciente ='" + ConsultaMedica.txtRut.getText() + "' "
        );
            
            ResultSet res = pre.executeQuery();
            
        while(res.next())
        {
            String rut = res.getString("rut_paciente");
            data[0][0] = rut;
        }
        /* Comprobamos si el rut está correcto, si está procede si no, saltará un mensaje*/
        if(ConsultaMedica.txtRut.getText().equals(data[0][0]))
        {
            f.setVisible(true);   
            res.close();
        }
        else
        {
            JOptionPane.showMessageDialog(null,"El rut \"" + ConsultaMedica.txtRut.getText() + "\" no ha hecho una consulta medica.");
        }
        }
        catch(SQLException | ArrayIndexOutOfBoundsException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
    }  
                       /*------------------- FIN METODO BUSCAR VALIDAR DATOS -------------------*/
    
                                          /* Metodo  Detalles de la consulta*/
    
    public void detallesConsulta(String codigo){
               
        Object[][] detalles  = new String[12][3];
                
        try{
            PreparedStatement pre;
            
            /* Un inner join para sacar datos de 3 tablas diferentes (Nombre_Examen, Tipo_Examen & Solicitado (SI o NO) */
            
            pre = con.getConexion().prepareStatement
            (
                    " SELECT nombre_examen, tipo_examenes, solicitado  FROM Detalles_Consultas        " +
                    " INNER JOIN Examenes ON Detalles_Consultas.codigo_examen = Examenes.codigo_examen" +
                    " WHERE codigo_consulta = " + codigo
            );
            ResultSet res = pre.executeQuery();
        int i = 0; 
        while(res.next())
        {
            /* Guardamos los datos en variables*/
            String nombreExamen       =   res.getString("nombre_examen");
            String tipoExamen         =   res.getString("tipo_examenes");
            String solicitado         =   res.getString("solicitado");
            /* Guardamos los datos en nuestro vector*/
            detalles[i][0]            =   solicitado;
            detalles[i][1]            =   nombreExamen;
            detalles[i][2]            =   tipoExamen;
            /* Nombre de las columnas que tendrán nuestras tablas*/
                    
            String deta = (String) detalles[i][1];
            switch(deta){
                case "Bioquímica":    FichaPaciente.BP.setText((String) detalles[i][0]);
                    break;
                case "Orina":         FichaPaciente.OP.setText((String) detalles[i][0]);
                    break;
                case "Haces":         FichaPaciente.HP.setText((String) detalles[i][0]);
                    break;
                case "Glucosa":       FichaPaciente.GP.setText((String) detalles[i][0]);
                    break;                   
                 case "Torax":        FichaPaciente.TR.setText((String) detalles[i][0]);
                    break;
                case "Columna":       FichaPaciente.CR.setText((String) detalles[i][0]);
                    break;
                case "Cabeza":        FichaPaciente.CR2.setText((String) detalles[i][0]);
                    break;
                case "Abdomen":       FichaPaciente.AR.setText((String) detalles[i][0]);
                    break;
                case "Cabeza2":       FichaPaciente.CE.setText((String) detalles[i][0]);
                    break;
                case "Torax2":        FichaPaciente.TE.setText((String) detalles[i][0]);
                    break;
                case "Abdomen2":      FichaPaciente.AE.setText((String) detalles[i][0]);
                    break;
                case "Brazo":         FichaPaciente.BE.setText((String) detalles[i][0]);
                    break;                    
            } 
            i++;
        }
        }
        catch(SQLException e)
        {
            JOptionPane.showMessageDialog(null, e);
        }
    }

                      /*METODOS DEL PACIENTE EN JFRAME PANELMEDICO*/
     
        public void NuevoPaciente(String rut, String nombre, String apellido, String fecha)
        {
               
            try 
            {            

                PreparedStatement pre;
                
                pre = con.getConexion().prepareStatement      
                (
                        "INSERT INTO Pacientes" + 
                        "(rut_paciente, nombre_paciente, apellido_paciente, fecha_nacimiento) " +
                        "VALUES(?,?,?,?)"
                );  
                pre.setString(1, rut      );
                pre.setString(2, nombre   );
                pre.setString(3, apellido );                        
                pre.setString(4, fecha    );                                        
                pre.execute();
                pre.close();   
            }
               
            catch(SQLException e)
            {
                System.out.println(e);
            }   
        }
        
        /*METODO BORRAR PACIENTE*/
        public void deletePaciente(String cod)
        {           
            try
            { 
                PreparedStatement pre;
                pre= con.getConexion().prepareStatement
                (
                        "DELETE FROM Pacientes WHERE = ?"
                );                
                pre.setString(1, cod);
                pre.execute();
                pre.close();            
                
            }
            catch(SQLException e)
            {
                System.out.println(e);
            }  
        }
        
        
        public void updatePaciente(String rut, String nombre, String apellido, String fecha)
        {
               
            try {            
              
                PreparedStatement pre;
                pre = con.getConexion().prepareStatement
                (
                        "UPDATE Pacientes         " +
                        "nombre_paciente     = ? ," +
                        "apellido_paciente   = ? ," +                    
                        "fecha_nacimiento    = ?  " +                    
                        "WHERE rut_paciente  = ?  "
                );                               
               pre.setString(1, nombre   );
               pre.setString(2, apellido );
               pre.setString(3, fecha    );
               pre.setString(4, rut      );
               pre.execute();   
               pre.close();
            }
            catch(SQLException e)
            {
                System.out.println(e);
            }
        }
        


         /*obtenemos todos los datos de la tabla*/
         public Object [][] getDatos(){
              int registros = 0;
              //obtenemos la cantidad de registros existentes en la tabla
              try{         
                 PreparedStatement pstm = con.getConexion().prepareStatement("SELECT count(1) as total FROM Pacientes ");
                 ResultSet res = pstm.executeQuery();
                 res.next();
                 registros = res.getInt("total");
                 res.close();
              }catch(SQLException e){
                 System.out.println(e);
              }

            Object[][] data = new String[registros][4];  
            //realizamos la consulta sql y llenamos los datos en "Object"
              try{    
                 PreparedStatement pstm = con.getConexion().prepareStatement("SELECT " +
                    " rut_paciente,nombre_paciente,apellido_paciente,fecha_nacimiento " +
                    " FROM Pacientes" +
                    " ORDER BY nombre_paciente ");

                 ResultSet res = pstm.executeQuery();
                 int i = 0;
                 while(res.next()){
                    String estrut = res.getString("rut_paciente");
                    String estNombre = res.getString("nombre_paciente");
                    String estapellido = res.getString("apellido_paciente");
                    String fechaPaciente = res.getString("fecha_nacimiento");
                    data[i][0] = estrut;            
                    data[i][1] = estNombre;            
                    data[i][2] = estapellido;            
                    data[i][3] = fechaPaciente;            

                    i++;
                 }
                 res.close();
                  }catch(SQLException e){
                 System.out.println(e);
            }
            return data;
         }
     /*METODO PARA OBTENER LA FECHA*/
 
     SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
     public String getFecha(JDateChooser jd)
     {
         if (jd.getDate() !=null)
         {
             return formato.format(jd.getDate());
         }
         else
         {
             return null;
         }
     }    
}